package futbol.tacticas.concursantes2007.TacticaTururu;

import java.awt.Point;

import futbol.tacticas.SituacionJugadores;

public class Entrenador {

	// valores a evolucionar
	private int lineaDefensiva = 0;
	private int distanciaMinimaPase = 0;

	Jugador [] jugador = new Jugador [Constantes.JUGADORES_EN_TERRENO];
    private int [] dorsalesDefensa;
    private int [] dorsalesDelantera;

	private SituacionJugadores situacionJugadores;

	public void setDistanciaMinimaPase(int distanciaMinimaPase) {
		this.distanciaMinimaPase = distanciaMinimaPase;
	}

	public void setLineaDefensiva(int lineaDefensiva) {
		this.lineaDefensiva = lineaDefensiva;
	}

	public void conoceEquipo (Jugador [] jugador, Alineacion alineacion, int [] dorsalesDefensa,
		    int [] dorsalesMedioCampoAtras, int [] dorsalesMedioCampoAlante, int [] dorsalesDelantera) {

		this.dorsalesDefensa = dorsalesDefensa;
		this.dorsalesDelantera = dorsalesDelantera;
		this.jugador = jugador;
	}

	public void setSituacionJugadores(final SituacionJugadores situacionJugadores) {
		this.situacionJugadores = situacionJugadores;
	}

	public void asignaMarcajesDefensa () {

		for (int i = 0; i < Constantes.JUGADORES_EN_TERRENO; i++) {

			if (situacionJugadores.getContrario()[i].getX() <= lineaDefensiva) {

				// se le asigna al defensa mas cercano
				int masCercano = 0;
				int distancia = 10000;
				for (int j = 0; j < dorsalesDefensa.length; j++) {

					int tmp = Jugador.calcularDistancia(situacionJugadores.getContrario()[i], situacionJugadores.getMisJugadores()[dorsalesDefensa[j]]);
					if (tmp < distancia) {
						distancia = tmp;
						masCercano = dorsalesDefensa[j];
					}
				}

				// se le dice a los demas que dejen de cubrirlo (si es que alguno lo estaba haciendo)
				for (int j = 0; j < dorsalesDefensa.length; j++) {

					if (((Defensa) jugador[dorsalesDefensa[j]]).getCubreJugador() == i) {
						((Defensa) jugador[dorsalesDefensa[j]]).setCubreJugador(Constantes.NO_CUBRIR);
					}
				}

				((Defensa) jugador[masCercano]).setCubreJugador(i);

			} // if (situacionJugadores.getContrario()[i].getX() <= -50)
		} // for (int i = 0; i < Constantes.JUGADORES_EN_TERRENO; i++)
	} // public void asignaMarcajesDefensa ()

	public void asignaPases () {

		for (int allJugadores = 0; allJugadores < Constantes.JUGADORES_EN_TERRENO - dorsalesDelantera.length; allJugadores++)  {

			Jugador elDelPase = jugador[allJugadores];
			Point[] adelantados = new Point [situacionJugadores.getMisJugadores().length];

			for (int i = 0; i < Constantes.JUGADORES_EN_TERRENO; i++) {
				adelantados[i] = new Point(situacionJugadores.getMisJugadores()[i]);
			}

			for (int i = 0; i < Constantes.JUGADORES_EN_TERRENO; i++) {

				if (elDelPase.getPosicionX() + distanciaMinimaPase > adelantados[i].getX())
					adelantados[i] = new Point (1000, 1000);
			}

			int jugadorPase = 20;
			int distanciaMasCercano = 1000;

			for (int i = 0; i < adelantados.length; i++) {

				if (adelantados[i].getX() != 1000) {
					int tmp = Jugador.calcularDistancia(situacionJugadores.getMisJugadores()[elDelPase.dorsal], adelantados[i]);
					if (tmp < distanciaMasCercano) {
						jugadorPase = i;
						distanciaMasCercano = tmp;
					}
				}
			}
			jugador[allJugadores].setPase(jugadorPase);
		}
	} // public void asignaPases ()

} // public class Entrenador
